from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep

# 指定chromedriver路径（137版本）
driver_path = "D:\\pycharm\\PM_test\\chromedriver.exe"

# 创建WebDriver实例
service = Service(driver_path)
options = Options()
browser = webdriver.Chrome(service=service, options=options)
browser.maximize_window()
wait = WebDriverWait(browser, 10)

# 登录函数
def login():
    browser.get("http://146.56.217.9:9131")
    browser.find_element(By.ID, "username").send_keys("admin_9131")
    browser.find_element(By.ID, "password").send_keys("admin")
    browser.find_element(By.CLASS_NAME, "button").click()

# 封装添加服务函数
def add_service(service_data):
    browser.find_element(By.ID, "mainmenutd_products").click()
    browser.find_element(By.CSS_SELECTOR, '.menu_contenu_product_list > a[href="/product/list.php?leftmenu=service&type=1"]').click()

    # 产品编号
    browser.find_element(By.NAME, "search_ref").send_keys(service_data["ref"])
    # RefExt
    browser.find_element(By.NAME, "search_ref_ext").send_keys(service_data["ref_ext"])
    # 状态（销售(2不可采购，3可采购)）
    browser.find_element(By.CSS_SELECTOR, f"select#search_tosell>option:nth-child({service_data['tosell']})").click()
    # 状态（采购(2不可采购，3可采购)）
    browser.find_element(By.CSS_SELECTOR, f"select#search_tobuy>option:nth-child({service_data['tobuy']})").click()
    # 搜索按钮
    browser.find_element(By.NAME, "button_search_x").click()

if __name__ == '__main__':
    try:
        login()
        sleep(1)  # 等待页面加载

        # 服务搜索功能测试数据（3正向+3反向，共6个用例）
        # 测试结果：和预期全部一致
        test_data = [
            # --------------------- 正向测试用例 ---------------------
            {
                "case_desc": "精确搜索存在的服务",
                "ref": "SERVICE-001",  # 存在的服务编号
                "ref_ext": "",
                "tosell": 2,  # 可销售状态
                "tobuy": 2,  # 可采购状态
                "expected_result": "搜索结果显示1条记录，与输入条件匹配"
            },
            {
                "case_desc": "按销售状态搜索",
                "ref": "",  # 不填写编号
                "ref_ext": "",
                "tosell": 3,  # 不可销售状态
                "tobuy": 2,
                "expected_result": "搜索结果显示所有不可销售的服务"
            },
            {
                "case_desc": "组合条件搜索",
                "ref": "SERVICE",  # 部分编号
                "ref_ext": "00",  # 部分扩展编号
                "tosell": 2,
                "tobuy": 3,  # 不可采购状态
                "expected_result": "搜索结果显示编号包含'SERVICE'、扩展编号包含'00'且不可采购的服务"
            },

            # --------------------- 反向测试用例 ---------------------
            {
                "case_desc": "搜索不存在的服务",
                "ref": "NONEXISTENT",  # 不存在的编号
                "ref_ext": "",
                "tosell": 2,
                "tobuy": 2,
                "expected_result": "搜索结果显示0条记录，提示'未找到匹配数据'"
            },
            {
                "case_desc": "空编号搜索",
                "ref": "",  # 空编号
                "ref_ext": "",
                "tosell": 2,
                "tobuy": 2,
                "expected_result": "搜索结果显示所有可销售且可采购的服务"
            },
            {
                "case_desc": "无效销售状态搜索",
                "ref": "SERVICE-001",
                "ref_ext": "",
                "tosell": 1,  # 无效销售状态
                "tobuy": 2,
                "expected_result": "搜索结果显示0条记录，提示'未找到匹配数据'"
            }
        ]
        for data in test_data:
            add_service(data)
            sleep(1)  # 等待操作完成
    except Exception as e:
        print("发生错误：", e)
    finally:
        sleep(1)
        browser.quit()